﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class TipoOrganizacaoOrganizacao
    {
        #region Variaveis Membro
        private int _idTipoOrganizacaoOrganizacao;
        private int _idOrganizacao;
        private TipoOrganizacao _tipoOrganizacao;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdTipoOrganizacaoOrganizacao
        {
            get { return _idTipoOrganizacaoOrganizacao; }
            set { _idTipoOrganizacaoOrganizacao = value; }
        }
        public int IdOrganizacao
        {
            get { return _idOrganizacao; }
            set { _idOrganizacao = value; }
        }
        public TipoOrganizacao TipoOrganizacao
        {
            get { return _tipoOrganizacao; }
            set { _tipoOrganizacao = value; }
        }
        #endregion

        #region Construtores
        public TipoOrganizacaoOrganizacao()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public TipoOrganizacaoOrganizacao(int idOrganOrgan)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idOrganOrgan);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        private void Carregar(int idOrganOrgan)
        {
            try
            {
                var consulta = from tpo in _context.tab_tporgan_organ
                               where tpo.id_tporgan_organ == idOrganOrgan
                               select new { tpo.id_tporgan_organ, tpo.tab_organizacao.Id_organizacao, tpo.tab_tipo_organizacao.id_tipo_organizacao };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idTipoOrganizacaoOrganizacao = list.id_tporgan_organ;
                    this._idOrganizacao = list.Id_organizacao;
                    this._tipoOrganizacao = new TipoOrganizacao(list.id_tipo_organizacao);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private bool ExisteCadastro()
        {
            try
            {
                bool existe = false;

                var consulta = from tpo in _context.tab_tporgan_organ
                               where tpo.tab_organizacao.Id_organizacao == _idOrganizacao && tpo.tab_tipo_organizacao.id_tipo_organizacao == _tipoOrganizacao.IdTipoOrganizacao
                               select new { tpo.id_tporgan_organ, tpo.tab_organizacao.Id_organizacao, tpo.tab_tipo_organizacao.id_tipo_organizacao };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    existe = true;
                }

                return existe;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos
        
        #region Metodos Selecao
        public List<TipoOrganizacaoOrganizacao> SelectAll()
        {
            try
            {
                List<TipoOrganizacaoOrganizacao> listTipoOrganOrgan = new List<TipoOrganizacaoOrganizacao>();

                var consulta = from tpo in _context.tab_tporgan_organ
                               select new { tpo.id_tporgan_organ, tpo.tab_organizacao.Id_organizacao, tpo.tab_tipo_organizacao.id_tipo_organizacao };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    TipoOrganizacaoOrganizacao tipoOrganOrgan = new TipoOrganizacaoOrganizacao();
                    tipoOrganOrgan.IdTipoOrganizacaoOrganizacao = list.id_tporgan_organ;
                    tipoOrganOrgan.IdOrganizacao = list.Id_organizacao;
                    tipoOrganOrgan.TipoOrganizacao = new TipoOrganizacao(list.id_tipo_organizacao);

                    listTipoOrganOrgan.Add(tipoOrganOrgan);
                }
                return listTipoOrganOrgan;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<TipoOrganizacaoOrganizacao> SelectOrganizacao(int idOrganizacao)
        {
            try
            {
                List<TipoOrganizacaoOrganizacao> listTipoOrganOrgan = new List<TipoOrganizacaoOrganizacao>();

                var consulta = from tpo in _context.tab_tporgan_organ
                               where tpo.tab_organizacao.Id_organizacao == idOrganizacao
                               select new { tpo.id_tporgan_organ, tpo.tab_organizacao.Id_organizacao, tpo.tab_tipo_organizacao.id_tipo_organizacao };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    TipoOrganizacaoOrganizacao tipoOrganOrgan = new TipoOrganizacaoOrganizacao();
                    tipoOrganOrgan.IdTipoOrganizacaoOrganizacao = list.id_tporgan_organ;
                    tipoOrganOrgan.IdOrganizacao = list.Id_organizacao;
                    tipoOrganOrgan.TipoOrganizacao = new TipoOrganizacao(list.id_tipo_organizacao);

                    listTipoOrganOrgan.Add(tipoOrganOrgan);
                }
                return listTipoOrganOrgan;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persitencia
        public void Salvar()
        {
            try
            {
                if (!ExisteCadastro())
                {
                    tab_tporgan_organ tabTipoOrganOrgan = new tab_tporgan_organ();
                    tabTipoOrganOrgan.tab_organizacaoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_organizacao", "Id_organizacao", _idOrganizacao);
                    tabTipoOrganOrgan.tab_tipo_organizacaoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_tipo_organizacao", "id_tipo_organizacao", _tipoOrganizacao.IdTipoOrganizacao);

                    _context.AddTotab_tporgan_organ(tabTipoOrganOrgan);
                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
        #endregion
    }
}
